import { useSearchParams } from "react-router-dom"
import { useRequest } from "ahooks"
import { getQuestionListService } from "../services/question"
import { LIST_SEARCH_PARAM_KEY, LIST_PAGE_PARAM_KEY, LIST_PAGE_SIZE_PARAM_KEY, LIST_PAGE_SIZE } from "../constant"

type OptionType = {
    isStar: boolean
    isDeleted: boolean
}

function useLoadQuestionListData(opt: Partial<OptionType> = {}) {
    const { isStar, isDeleted } = opt
    const [searchParams] = useSearchParams()

    async function getData() {
        // 获取搜索关键词
        const keyword = searchParams.get(LIST_SEARCH_PARAM_KEY) || "" // 如果为空就设置为空字符串，限定为string类型
        // 获取page关键词（要一个数字类型）
        const page = parseInt(searchParams.get(LIST_PAGE_PARAM_KEY) || "") || 1
        // 获取分页大小关键词（当前页有多少条数据）
        const pageSize = parseInt(searchParams.get(LIST_PAGE_SIZE_PARAM_KEY) || "") || LIST_PAGE_SIZE

        const data = await getQuestionListService({ keyword, isStar, isDeleted, page, pageSize })
        return data
    }

    // 不能直接传入getQuestionListService，因为要传递参数
    const { loading, data, error, refresh } = useRequest(getData, {
        refreshDeps: [searchParams] // 依赖性，searchParams更新，数据就刷新
    }) // 传递依赖项
    return { loading, data, error, refresh } // refresh是一个函数，可以用于手动刷新
}

export default useLoadQuestionListData
